package cn.chengpengper.seckill.stock.domain.service;

import cn.chengpengper.seckill.stock.domain.model.dto.SeckillStockBucketDeduction;
import cn.chengpengper.seckill.stock.domain.model.entity.SeckillStockBucket;

import java.util.List;

/**
 * @author chengpeng.hu
 */
public interface SeckillStockBucketDomainService {

    /**
     * 暂停库存
     *
     * @param goodsId 商品ID
     * @return 是否暂停成功
     */
    boolean suspendBuckets(Long goodsId);

    /**
     * 恢复库存
     *
     * @param goodsId 商品ID
     * @return 是否恢复成功
     */
    boolean resumeBuckets(Long goodsId);

    /**
     * 根据商品id获取库存分桶列表
     *
     * @param goodsId 商品ID
     * @return 库存分桶列表
     */
    List<SeckillStockBucket> getBucketsByGoodsId(Long goodsId);

    /**
     * 编排库存分桶
     *
     * @param goodsId 商品ID
     * @param buckets 库存分桶列表
     * @return 是否编排成功
     */
    boolean arrangeBuckets(Long goodsId, List<SeckillStockBucket> buckets);

    /**
     * 扣减库存
     *
     * @param stockDeduction 库存实体类
     * @return 是否扣减成功
     */
    boolean decreaseStock(SeckillStockBucketDeduction stockDeduction);

    /**
     * 增加库存
     *
     * @param stockDeduction 库存实体类
     * @return 是否增加成功
     */
    boolean increaseStock(SeckillStockBucketDeduction stockDeduction);

}
